//！！！！！！！！！！！！！！！
//这个优化主要体现在判断时只用了一次循环。就可以把上下和左右都判断了。虽然上下和左右都判断了两次
#include<stdio.h>
int main()
{
int num; //输入num组数据
    scanf("%d",&num);
int a[50][50];//定义矩阵的大小
    int i,j,k,m;
    for(i=0;i<num;i++)
    {
        scanf("%d",&m);//输入矩阵的阶数
        //输入数据
        for(j=0;j<m;j++)
            for(k=0;k<m;k++)
            {
                scanf("%d",&a[j][k]);
            }
        //判断是否符合条件
        for(j=0;j<m;j++)
            for(k=0;k<m;k++)
            {
                if(a[j][k]!=a[m-1-j][k]||a[j][k]!=a[j][m-1-k])//上下对称，左右对称
                {printf("no\n");j=m;break;}
                //注：当不符合条件时，要退出二重循环，break可以退出里面的那层循环，而j=m是让外面那层循环退出
                //（当j=m时，再执行j++后，此时j<m不符合循环条件直接退出）
            if(j==m-1&&k==m-1)printf("yes\n");
            }
    }
    return 0;
}
